#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Core;
using Cephei.Core.Generic;
using Microsoft.FSharp.Core;
namespace Cephei.QL.Times
{
    /// <summary> 
	/// ! \ingroup datetime
	/// </summary>
    [Guid ("A0D05018-C206-47a7-87F2-10B6471ED4FD"),ComVisible(true)]
	public interface ISchedule 
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        /// <summary> 
		/// 
		/// </summary>
		 DateTime At(UInt64 i);
        /// <summary> 
		/// 
		/// </summary>
		 QL.Times.BusinessDayConventionEnum BusinessDayConvention {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.QL.Times.ICalendar Calendar {get;}
        /// <summary> 
		/// 
		/// </summary>
		 DateTime Date(UInt64 i);
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.Core.IVector<DateTime> Dates {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Boolean Empty {get;}
        /// <summary> 
		/// 
		/// </summary>
		 DateTime EndDate {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Boolean EndOfMonth {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Boolean IsRegular(UInt64 i);
        /// <summary> 
		/// 
		/// </summary>
		 DateTime NextDate(DateTime refDate);
        /// <summary> 
		/// 
		/// </summary>
		 DateTime PreviousDate(DateTime refDate);
        /// <summary> 
		/// 
		/// </summary>
		 QL.Times.DateGeneration.RuleEnum Rule {get;}
        /// <summary> 
		/// 
		/// </summary>
		 UInt64 Size {get;}
        /// <summary> 
		/// 
		/// </summary>
		 DateTime StartDate {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.QL.Times.IPeriod Tenor {get;}
        /// <summary> 
		/// 
		/// </summary>
		 QL.Times.BusinessDayConventionEnum TerminationDateBusinessDayConvention {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.QL.Times.ISchedule Until(DateTime truncationDate);
    }   

    /// <summary> 
	/// ! \ingroup datetime Factory
	/// </summary>
   	[ComVisible(true)]
    public interface ISchedule_Factory 
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
        /// <summary> 
		/// 
		/// </summary>
	    ISchedule Create ();
        /// <summary> 
		/// 
		/// </summary>
	    ISchedule Create (Cephei.Core.IVector<DateTime> dates, Microsoft.FSharp.Core.FSharpOption<Cephei.QL.Times.ICalendar> calendar, Microsoft.FSharp.Core.FSharpOption<QL.Times.BusinessDayConventionEnum> convention);
        /// <summary> 
		/// 
		/// </summary>
	    ISchedule Create (DateTime effectiveDate, DateTime terminationDate, Cephei.QL.Times.IPeriod tenor, Cephei.QL.Times.ICalendar calendar, QL.Times.BusinessDayConventionEnum convention, QL.Times.BusinessDayConventionEnum terminationDateConvention, QL.Times.DateGeneration.RuleEnum rule, Boolean endOfMonth, Microsoft.FSharp.Core.FSharpOption<DateTime> firstDate, Microsoft.FSharp.Core.FSharpOption<DateTime> nextToLastDate);
    }
}

